<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>const 关键字</title>
    <!-- 
        作用：声明常量，常量就是值（内存地址）不能变化的量。
        具有块级作用域 
        if (true) {
            const a = 10;
        }
        console.log(a) // a is not defined
        声明常量时必须赋值
        const PI; // Missing initializer in const declaration
        常量赋值后，值不能修改。
        // const PI = 3.14;
        // PI = 100; // Assignment to constant variable. 
        const ary = [100, 200];
        ary[0] = 'a';
        ary[1] = 'b';
        console.log(ary); // ['a', 'b']; 
        // ary = ['a', 'b']; // Assignment to constant variable.
     -->
</head>

<body>

</body>
<script>
    // 使用const关键字声明的常量具有块级作用域
	// if (true) {
	// 	const a = 10;
	// 	if (true) {
	// 		const a = 20;
	// 		console.log(a);
	// 	}
	// 	console.log(a);
	// }
	// console.log(a);
    // 使用const关键字声明的常量必须赋初始值
	// const PI = 3.14;

    // 常量声明后值不可更改 
	const PI = 3.14;
	// PI = 100;
	const ary = [100, 200];
	ary[0] = 123;
	ary = [1, 2]
	console.log(ary);


</script>
<!-- 
    let、const、var 的区别
1. 使用 var 声明的变量，其作用域为该语句所在的函数内，且存在变量提升现象。

2. 使用 let 声明的变量，其作用域为该语句所在的代码块内，不存在变量提升。

3. 使用 const 声明的是常量，在后面出现的代码中不能再修改该常量的值。 

var: 函数作用域  变量提升           值可以更改
let：块级作用域  不存在变量提升      值可以更改
const:块级作用域  不存在变量提升     值不可以更改
 -->
</html>